package org.example.mall.admin.configuration.auth.handler;

import org.example.mall.admin.model.entity.manage.AccountAuth;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

import java.util.Map;

/**
 * @author hzq
 * @date 2021/12/6 11:47
 */
public interface AuthHandler {

    /**
     * 处理认证
     *
     * @param principal   标识
     * @param credentials 凭证
     * @param parameters  参数
     * @return 用户信息
     * @throws AuthenticationException 身份验证异常
     */
    UserDetails handler(String principal, String credentials, Map<String, String> parameters) throws AuthenticationException;

    /**
     * @return 处理器类型
     */
    String getHandlerType();

    /**
     * 检验认证信息
     * 是否过期
     * 是否锁定
     * 及其他检验
     *
     * @param auth 人信息新增
     */
    default void checkAuth(AccountAuth auth) {
        if (auth == null) {
            throw new UsernameNotFoundException("用户名或密码错误");
        }
    }

}
